{% extends "base.html" %}

{% block content %}

<!-- 引入 CDN Crypto.js 开始 AES加密 注意引入顺序 -->
<script src="sha256.js"></script>

<!-- 引入 CDN Crypto.js 结束 -->
<!-- <script>
    function encryptData() {
        // var crypto = require("crypto");
        const hash_email = crypto.createHash('sha256');
        const hash_username = crypto.createHash('sha256');
        const hash_password = crypto.createHash('sha256');

        // 获取表单中的输入值
        var email = document.getElementById("email").value;
        var name = document.getElementById("name").value;
        var password = document.getElementById("password").value;

        // SHA-256加密
        hash_email.update(email);
        hash_username.update(name);
        hash_password.update(password);

        console.log(hash_email)
        console.log(hash_username)
        console.log(hash_password)

        // 将加密后的值存储到隐藏字段中，或直接将其发送给后端处理
        document.getElementById("encryptedEmail").value = hash_email;
        document.getElementById("encryptedName").value = hash_username;
        document.getElementById("encryptedPassword").value = hash_password;

        // 提交表单
        document.getElementById("signupForm").submit();
    }
</script> -->

<script>
    /**

 *

 * Secure Hash Algorithm (SHA256)

 * http://www.webtoolkit.info/

 *

 * Original code by Angel Marin, Paul Johnston.

 *

 **/

function SHA256(s){

var chrsz = 8;

var hexcase = 0;

function safe_add (x, y) {

    var lsw = (x & 0xFFFF) + (y & 0xFFFF);

    var msw = (x >> 16) + (y >> 16) + (lsw >> 16);

    return (msw << 16) | (lsw & 0xFFFF);

}

function S (X, n) { return ( X >>> n ) | (X << (32 - n)); }

function R (X, n) { return ( X >>> n ); }

function Ch(x, y, z) { return ((x & y) ^ ((~x) & z)); }

function Maj(x, y, z) { return ((x & y) ^ (x & z) ^ (y & z)); }

function Sigma0256(x) { return (S(x, 2) ^ S(x, 13) ^ S(x, 22)); }

function Sigma1256(x) { return (S(x, 6) ^ S(x, 11) ^ S(x, 25)); }

function Gamma0256(x) { return (S(x, 7) ^ S(x, 18) ^ R(x, 3)); }

function Gamma1256(x) { return (S(x, 17) ^ S(x, 19) ^ R(x, 10)); }

function core_sha256 (m, l) {

    var K = new Array(0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, 0xE49B69C1, 0xEFBE4786, 0xFC19DC6, 0x240CA1CC, 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, 0xC6E00BF3, 0xD5A79147, 0x6CA6351, 0x14292967, 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3, 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2);

    var HASH = new Array(0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A, 0x510E527F, 0x9B05688C, 0x1F83D9AB, 0x5BE0CD19);

    var W = new Array(64);

    var a, b, c, d, e, f, g, h, i, j;

    var T1, T2;

    m[l >> 5] |= 0x80 << (24 - l % 32);

    m[((l + 64 >> 9) << 4) + 15] = l;

    for ( var i = 0; i<m.length; i+=16)
    {
    a = HASH[0];

    b = HASH[1];

    c = HASH[2];

    d = HASH[3];

    e = HASH[4];

    f = HASH[5];

    g = HASH[6];

    h = HASH[7];

    for ( var j = 0; j<64; j++) {

        if (j < 16) W[j] = m[j + i];

        else W[j] = safe_add(safe_add(safe_add(Gamma1256(W[j - 2]), W[j - 7]), Gamma0256(W[j - 15])), W[j - 16]);

        T1 = safe_add(safe_add(safe_add(safe_add(h, Sigma1256(e)), Ch(e, f, g)), K[j]), W[j]);

        T2 = safe_add(Sigma0256(a), Maj(a, b, c));

        h = g;

        g = f;

        f = e;

        e = safe_add(d, T1);

        d = c;

        c = b;

        b = a;

        a = safe_add(T1, T2);

    }

    HASH[0] = safe_add(a, HASH[0]);

    HASH[1] = safe_add(b, HASH[1]);

    HASH[2] = safe_add(c, HASH[2]);

    HASH[3] = safe_add(d, HASH[3]);

    HASH[4] = safe_add(e, HASH[4]);

    HASH[5] = safe_add(f, HASH[5]);

    HASH[6] = safe_add(g, HASH[6]);

    HASH[7] = safe_add(h, HASH[7]);

}

return HASH;

}

function str2binb (str) {

var bin = Array();

var mask = (1 << chrsz) - 1;

for(var i = 0; i < str.length * chrsz; i += chrsz) {

    bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (24 - i%32);

}

return bin;

}

function Utf8Encode(string) {

string = string.replace(/\r\n/g,"\n");

var utftext = "";

for (var n = 0; n < string.length; n++) {

    var c = string.charCodeAt(n);

    if (c < 128) {

        utftext += String.fromCharCode(c);

    }

    else if((c > 127) && (c < 2048)) {

        utftext += String.fromCharCode((c >> 6) | 192);

        utftext += String.fromCharCode((c & 63) | 128);

    }

    else {

        utftext += String.fromCharCode((c >> 12) | 224);

        utftext += String.fromCharCode(((c >> 6) & 63) | 128);

        utftext += String.fromCharCode((c & 63) | 128);

    }

}

return utftext;

}

function binb2hex (binarray) {

var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";

var str = "";

for(var i = 0; i < binarray.length * 4; i++) {

    str += hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF) +

        hex_tab.charAt((binarray[i>>2] >> ((3 - i%4)*8 )) & 0xF);

}

return str;

}

s = Utf8Encode(s);

return binb2hex(core_sha256(str2binb(s), s.length * chrsz));

}

    function encryptData() {
        var email = document.getElementById("email").value;
        var name = document.getElementById("name").value;
        var password = document.getElementById("password").value;

        // hash_email = SHA256(email)
        // hash_username = name
        // hash_password = SHA256(password)

        document.getElementById("encryptedEmail").value = email;
        document.getElementById("encryptedName").value = name;
        document.getElementById("encryptedPassword").value = password;

        // console.log(hash_email)
        // console.log(hash_password)

        // 提交表单
        document.getElementById("signupForm").submit();
    }
</script>

<div class="column is-4 is-offset-4">
    <h3 class="title">Sign Up</h3>
    <div class="box">
        {% with messages = get_flashed_messages() %}
            {% if messages %}
                <div class="notification is-danger">
                    {{ messages[0] }}<br> Go to <a href="{{ url_for('auth.login') }}">login page</a>.
                </div>
            {% endif %}
        {% endwith %}

        <input class="input is-large" type="email" name="email" id="email" placeholder="Email" autofocus="">
        <input class="input is-large" type="text" name="name" id="name" placeholder="Name" autofocus="">
        <input class="input is-large" type="password" name="password" id="password" placeholder="Password">

        <form method="POST" action="/signup" id="signupForm">
        <input type="hidden" name="encryptedEmail" id="encryptedEmail">
        <input type="hidden" name="encryptedName" id="encryptedName">
        <input type="hidden" name="encryptedPassword" id="encryptedPassword">
        <!-- 其他表单字段 -->

        <button class="button is-block is-info is-large is-fullwidth" onclick="encryptData()">Sign Up</button>
        </form>

    </div>
</div>
{% endblock %}